# -*- coding: utf-8 -*- 
# @project : 《Atcoder》
# @Author : created by bensonrachel on 2021/8/7
# @File : （step3）C. Cows in Stalls（CF）.py
# https://codeforces.com/edu/course/2/lesson/6/3/practice/contest/285083/problem/C

def check(mid):  # 枚举的是牛的数量。也可以枚举牛棚的数量
    pre = 0  # 第一个牛棚一定要放牛，因为要充分利用牛棚之间的距离来放多点，所以不要浪费前面的距离。
    for i in range(1, k):
        nxt = pre + 1
        while (nxt < n and (rate[nxt] - rate[pre]) < mid):
            nxt += 1
        if (nxt == n): return False
        pre = nxt
    return True


def bi():  # 左二分，最小化最大（最小值最大化）
    l = 0
    r = 10 ** 9 + 1
    while (l + 1 < r):
        mid = (l + r) // 2
        if (check(mid)):
            l = mid
        else:
            r = mid
    return l


if __name__ == "__main__":
    """
    左二分，找满足条件的最大值，即不大于的最大
    1111111000000，找最大的1。
    找到最大的最小距离,使得所有任意两牛之间的间距都不能小于这个最小距离。
    check():可以枚举牛的数量，也可以枚举牛棚的数量，这里由于觉得枚举牛的数量应该统一一点。
    关键是判断在当前最小距离里能否放下全部的牛，放不下说明有间距比当前的mid小，说明这个mid大了，放得下说明绰绰有余，
    所以mid可以再继续增大。
    """
    n, k = map(int, input().split())
    rate = [int(i) for i in input().split()]
    print(bi())
